/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ModeloLogicoSistema;
    
import Presentacion.DetalleIngresoEgreso;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import manejoDB.AdministradorDBStock;

/**
 *
 * @author Veko
 */
public class AdministradorStock {
   AdministradorDBStock consultadorDB;
   
   public AdministradorStock() throws SQLException {
        this.consultadorDB  = new AdministradorDBStock();
        this.consultadorDB.Conectar();
    }

    
    public Integer getUltimoCodigoProducto() throws SQLException {
        return this.consultadorDB.getNuevoCodigoProd();
    }

    public void setProducto(String desc, int cantEnStock) {
       try {
           this.consultadorDB.setNuevoProducto(desc, cantEnStock);
       } catch (SQLException ex) {
           Logger.getLogger(AdministradorStock.class.getName()).log(Level.SEVERE, null, ex);
       }
    }

    public ArrayList<Object[]> getTodosLosProductos() throws SQLException {
        
       return this.cargarListaProductos(this.consultadorDB.getTodosLosCodigos());
       
    }

    private ArrayList<Object[]> cargarListaProductos(ArrayList<Integer> lista) throws SQLException {
        
        ArrayList<Object[]> prod=new ArrayList();
        for(Integer cod: lista){
            prod.add(this.cargarProducto(cod));
        }
        return prod;
    }

    private Object[] cargarProducto(Integer cod) throws SQLException {
        String desc=this.consultadorDB.getNombreProducto(cod);
        Integer cant=this.consultadorDB.getcant(cod);
        Object[] retorno={cod,desc,cant};
       return retorno;
    }

   
    public void modificarCantEnStock(int cod, Integer cantidad) throws SQLException {
        this.consultadorDB.modificarCantEnStock(cod,cantidad);
    }

    public String getIngEgNombreProducto(Integer cod) throws SQLException {
        return this.consultadorDB.getNombreProducto(cod);
    }

    public ArrayList<Object[]> getIngresosEntreFechas(String fechaI,String fechaF) throws SQLException{
       ArrayList<Object[]> ingresos=new ArrayList(); 
       ArrayList<Integer> codigosIngresos=this.consultadorDB.getCodIngresosStock(fechaI,fechaF);
       for(Integer cod: codigosIngresos){
           String fecha =this.consultadorDB.getFechaIngreso(cod);
           Double precio=this.consultadorDB.getPrecioxIngreso(cod);
           Object[] datos={cod,fecha,precio};
           ingresos.add(datos);
       }
       return ingresos;
    }
    private Double getPrecioIngresoEntreFechas(String fechaI,String fechaF) throws SQLException {
        return this.consultadorDB.getPrecioxIngresoEntreFechas(fechaI,fechaF);
    }

    public void modificarDescripcion(Integer cod, String desc) throws SQLException {
        this.consultadorDB.modificarDescripcion(cod,desc);
    }
    
    public ArrayList<String> getListaStock() throws SQLException{
        return this.consultadorDB.getListaDescStock();
    }
    
    public Integer getCodProducto(String nombre) throws SQLException{
        return this.consultadorDB.getCodProducto(nombre);
    }
    
    public void ingreso(String fecha, ArrayList<ProductoIngresado> ingresos, Double montoTotal) throws Exception {
        if(ingresos.isEmpty() | fecha==null | fecha.isEmpty() | montoTotal==new Double(0)){
            throw new Exception();
        }
        Integer idIngreso=this.consultadorDB.setIngresoStock(fecha,montoTotal);
        for(ProductoIngresado producto:ingresos){
            try {
                this.consultadorDB.setIngresoXproducto(producto.getCodigoProducto(), idIngreso, producto.getPrecio(), producto.getCantidad());
            } catch (Exception ex) {
                Logger.getLogger(AdministradorStock.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
    }

    public void egreso(Integer codProducto, Integer cantidad, String fecha) throws Exception {
        this.consultadorDB.setEgreso(codProducto,cantidad,fecha);
    }

    public boolean nombreDeProductoTomado(String desc) throws SQLException {
        return this.consultadorDB.consultarNombreTomado(desc);
    }
    
}
